define(function(require) {
	/**
	 * @公用头部搜索框
	 * @关键词提示功能
	 * @2013-12-02
	 * @by yangyong
	 */
	function getByteLen(val) {
		var len = 0;
		for ( var i = 0; i < val.length; i++) {
			var length = val.charCodeAt(i);
			if (length >= 0 && length <= 128) {
				len += 1;
			} else {
				len += 2;
			}
		}
		return len;
	};
	var $ = require("jq");
	var isVip = $("#headerConfig").attr("data-isVip")=="yes"?true:false;
	function SearchTips(searchArea) {
		var _this_ = this;
		// 保存搜索区域
		this.searchArea = searchArea;
		// 保存搜索框
		this.searchInput = $(".search-input", searchArea);
		// 保存弹出框
		this.popup = $(".search-tips-box", searchArea);
		// 保存列表框
		this.listBox = $(".search-keyword-list", searchArea);
		// 保存关闭按钮
		this.closePopupBtn = $(".close-search-box-btn", searchArea);
		// 保存搜索按钮
		this.searchKeyBtn = $(".search-button", searchArea);
		// 当输入框获得焦点
		this.searchInput.focus(function() {
			var defVal = $(this).attr("data-value");
			if (defVal == $(this).val()) {
				$(this).val("");
			}
			;
			$(this).data("isFocus", true);
			if ($(this).val() != "") {
				_this_.sendKeyWord();
			} else {
				_this_.hiddenPopup();
			}
			;
		}).keyup(function(e) {
			var v = $(this).val();
//			if (e.which != 40 && e.which != 38 && e.which != 13) {
				// 当输入停顿一段时间再发送请求
			if(v!=_this_.lastSendValue){
				window.clearTimeout(this.timer);
				this.timer = window.setTimeout(function() {
					if (v != "") {
						_this_.sendKeyWord();
					} else {
						_this_.hiddenPopup();
					}
					;
				}, 300);
			}
			;

		}).click(function(e) {
			e.stopPropagation();
		});
		$(document).click(function() {
			_this_.initPopup();
		});
		this.popup.click(function(e) {
			e.stopPropagation();
		})
		// 当点击关闭按钮
		this.closePopupBtn.click(function() {
			_this_.initPopup();
		});
		// 准备保存列表数和初始数
		this.loop = 0;
		this.listSize = null;
		// 绑定hover事件
		this.listBox.mouseover(function(e) {
			if (e.target.tagName == "A") {
				$(e.target.parentNode).addClass("hover").siblings()
						.removeClass("hover");
			} else {
				$(e.target.parentNode.parentNode).addClass("hover").siblings()
						.removeClass("hover");
			}
			;
		});
		// 搜索按钮
		this.searchKeyBtn.click(function(e) {
			var _searchKey = _this_.searchInput.val();
			if (getByteLen(_searchKey) > 40) {
				return;
			}
			if (_searchKey == "") {
				_this_.searchInput.val(_this_.searchInput.attr("data-value"));
			}
			;
			// 执行搜索
			_this_.goSearch(_this_.searchInput.val());
		});
		// 绑定键盘上下切换
		$(document).keydown(function(e) {
			if (_this_.searchInput.data("isFocus")) {
				// 键盘向上键
				if (e.which == 38) {
					_this_.up();
				}
				;
				// 键盘向下键
				if (e.which == 40) {
					_this_.down();
				}
				;
				// 如果按下的是回车键
				if (e.which == 13) {
					_this_.goSearch(_this_.searchInput.val());
				}
				;
			}
			;
		});
	}
	;
	SearchTips.prototype = {
		lastSendValue : "",
		goSearch : function(key) {
			// 这里发送搜索
			if(!isVip){
				window.location.href = "/searchResult.do?keyword="
					+ encodeURI(encodeURI(key));
			}else if(isVip){
				window.location.href = "/vipRegion/productCategory.do?keyword="
					+ encodeURI(encodeURI(key));
			}
			
		},
		// 设置关键词到输入框
		setKeyToInput : function(v) {
			this.searchInput.val(v);
		},
		up : function() {
			// 如果list没有hover上
			if (this.listBox.children(".hover").get(0)) {
				this.loop = this.listBox.children(".hover").index();
				this.loop--;
				if (this.loop < 0) {
					this.loop = this.listSize - 1;
				}
				;
				this.listBox.children().eq(this.loop).addClass("hover")
						.siblings().removeClass("hover");
			} else {
				this.loop--;
				if (this.loop < 0) {
					this.loop = this.listSize - 1;
				}
				;
				this.listBox.children().eq(this.loop).addClass("hover")
						.siblings().removeClass("hover");
			}
			;
			// 当是用键盘上下键调整的时候,就更改当前选中的值
			this.setKeyToInput(this.listBox.children().eq(this.loop).attr(
					"data-key"));
		},
		down : function() {
			// 如果list没有hover上
			if (this.listBox.children(".hover").get(0)) {
				this.loop = this.listBox.children(".hover").index();
				this.loop++;
				if (this.loop > this.listSize - 1) {
					this.loop = 0;
				}
				;
				this.listBox.children().eq(this.loop).addClass("hover")
						.siblings().removeClass("hover");
			} else {
				this.listBox.children().eq(this.loop).addClass("hover")
						.siblings().removeClass("hover");
				this.loop++;
				if (this.loop > this.listSize - 1) {
					this.loop = 0;
				}
				;
			}
			;
			// 当是用键盘上下键调整的时候,就更改当前选中的值
			this.setKeyToInput(this.listBox.children().eq(this.loop).attr(
					"data-key"));
		},
		sendKeyWord : function() {
			var $this = this;
			// 过滤空格
			if (this.getValue() == "") {
				return;
			}
			var sendValue = this.getValue();
			$this.lastSendValue = sendValue;
			$.get("/pinzhiV2.0/search.do", {
				searchKey : sendValue,
				isVip : isVip?1:0
			}, function(json) {
				if (json[0]) {
					$this.addList(json);
					$this.showPopup();
				} else {
					$this.listBox.html("<li>没有为您匹配到相关商品</li>");
					$this.showPopup();
				}
				;
			}, "json");
		},
		addList : function(json) {
			var $this = this;
			// 先清空原有数据
			this.listBox.empty();
			// 再循环添加数据
			$(json).each(
					function(i, o) {
						$this.listBox.append("<li data-key='" + o.key
								+ "'><a href='" + o.url + o.key + "' onclick='_czc.push([\"_trackEvent\", \"品质网\", \"搜索商品\", \"" + o.key + "\"]);'><span>约" + o.num
								+ "个商品</span>" + o.key + "</a></li>");
					});
			// 数据展示完毕后,动态更改this.listItems
			this.listSize = this.listBox.children().size();
		},
		getValue : function() {
			return this.searchInput.val();
		},
		// 显示弹出框
		showPopup : function() {
			this.popup.addClass("search-tips-box-show");
		},
		hiddenPopup : function() {
			this.popup.removeClass("search-tips-box-show");
			this.listBox.empty();
		},
		// 当在搜索区域以外点击时执行
		initPopup : function() {
			if (this.searchInput.val() == "") {
				this.searchInput.val(this.searchInput.attr("data-value"));
			}
			;
			this.popup.removeClass("search-tips-box-show");
			this.listBox.empty();
			this.searchInput.blur().data("isFocus", false);
			this.loop = 0;
		}
	};
	var searchTips = new SearchTips($("#J_SearchTips"));
});
